package com.collectionutils;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import org.junit.Test;

import java.util.List;
import java.util.Set;

public class SetsDemo {

    /**
     *  集合运算,返回SetView,它也实现了Set接口,可以当做set使用
     */
    @Test
    public void setsTest(){
        Set<Integer> set01 = Sets.newHashSet(1, 2, 3, 4);
        Set<Integer> set02 = Sets.newHashSet(3, 4, 5, 6);
        //求并集
        SetView<Integer> unionSet = Sets.union(set01, set02);
        unionSet.forEach(System.out::println);
        //求交集,返回不可变copy集合,读取效率更高
        ImmutableSet<Integer> immutableSet = Sets.intersection(set01, set02).immutableCopy();
        immutableSet.forEach(System.out::println); // 3 4
        //求差集
        Sets.difference(set01,set02).immutableCopy().forEach(System.out::println);// 1,2
        //求对称差集
        Sets.symmetricDifference(set01, set02).forEach(System.out::println); // 1,2,5,6
        //返回所有子集
        Sets.powerSet(set01).forEach(System.out::println);
        // 创建笛卡尔积
        Sets.cartesianProduct(set01,set02).forEach(System.out::println);
    }
}
